package cn.ljy.authority.utils;

import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
import org.springframework.util.StringUtils;

import java.lang.reflect.Field;
import java.util.Collection;

public class MyObjectUtils {
    /**
     * @author ljy
     * 20220420
     * 判断类中的每个属性是否为空，包括父类
     * 当前设计为针对查询条件的判断，因为前端可能会传对象不为空，但属性值为空的查询条件过来，在判断树形条件的时候会不好操作
     * 说明：
     * 1.如果属性中有集合类型，只要长度为0，属性都判断为null
     * @param object
     * @return
     */
    public static boolean checkObjAllFieldsIsNull(Object object) {
        boolean result = true;//默认为空
        if (null == object) {
            result = true;
        } else {
            try {
                // 先遍历该类，getDeclaredFields不能遍历父类的属性。所以要遍历到父类
                Class currentClass = object.getClass();// 获取当前类的class
                while (!currentClass.isAssignableFrom(Object.class)) {//只要没有到最顶级的object父类
                    for (Field f : currentClass.getDeclaredFields()) { // getDeclaredFields获取该类的所有属性
                        f.setAccessible(true);
//                        System.out.println(f.get(object));//获取属性的值
//                        System.out.println(f.getType());// 获取属性的类型
                        if (f.get(object) != null) {
                            if(Collection.class.isAssignableFrom(f.getType())){ // 如果是集合类型
                                if(CollectionUtils.isNotEmpty((Collection) f.get(object))){
                                    result = false;
                                    break;
                                }
                            }else{
                                //如果有值，则对象不为Null
                                result=!StringUtils.hasLength(f.get(object).toString());
                                break;
                            }
                        }
                    }
                    //让当前类变为父类
                    currentClass = currentClass.getSuperclass();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return result;
    }

  /*  public static void main(String[] args) {
        SysPermisssionQuery query=new SysPermisssionQuery();
        System.out.println(checkObjAllFieldsIsNull(query));
    }*/
}